//+------------------------------------------------------------------+
//|                                               errhandlingapi.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <WinAPI/windef.h>
#include <WinAPI/winnt.h>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#import "kernel32.dll"
/// 引发一个异常
/// @param exception_code 异常代码
/// @param exception_flags 异常标志
/// @param number_of_arguments 附加参数数量
/// @param arguments 附加参数数组
void RaiseException(uint exception_code, uint exception_flags, uint number_of_arguments, const ulong &arguments[]);

/// 未处理异常过滤器
/// @param exception_info 异常信息指针
/// @return 处理结果
int UnhandledExceptionFilter(EXCEPTION_POINTERS &exception_info);

/// 设置未处理异常过滤器
/// @param top_level_exception_filter 顶层异常过滤器
/// @return 先前设置的过滤器
PVOID SetUnhandledExceptionFilter(PVOID top_level_exception_filter);

/// 获取最后一个错误代码
/// @return 系统最后记录的错误代码
uint GetLastError(void);

/// 设置最后一个错误代码
/// @param err_code 要设置的错误代码
void SetLastError(uint err_code);

/// 获取错误处理模式
/// @return 当前错误处理模式
uint GetErrorMode(void);

/// 设置错误处理模式
/// @param mode 新的错误处理模式
/// @return 先前设置的模式
uint SetErrorMode(uint mode);

/// 添加向量化异常处理程序
/// @param first 是否优先处理
/// @param handler 异常处理函数
/// @return 处理程序句柄
PVOID AddVectoredExceptionHandler(uint first, PVOID handler);

/// 移除向量化异常处理程序
/// @param handle 要移除的处理程序句柄
/// @return 操作结果
uint RemoveVectoredExceptionHandler(PVOID handle);

/// 添加向量化继续处理程序
/// @param first 是否优先处理
/// @param handler 继续处理函数
/// @return 处理程序句柄
PVOID AddVectoredContinueHandler(uint first, PVOID handler);

/// 移除向量化继续处理程序
/// @param handle 要移除的处理程序句柄
/// @return 操作结果
uint RemoveVectoredContinueHandler(PVOID handle);

/// 恢复最后的错误代码
/// @param err_code 要恢复的错误代码
void RestoreLastError(uint err_code);

/// 引发快速失败异常
/// @param exception_record 异常记录
/// @param context_record 上下文记录
/// @param flags 标志位
void RaiseFailFastException(EXCEPTION_RECORD &exception_record, CONTEXT &context_record, uint flags);

/// 致命应用程序退出
/// @param action 退出动作
/// @param message_text 显示的消息文本
void FatalAppExitW(uint action, const string message_text);

/// 获取线程错误模式
/// @return 当前线程的错误处理模式
uint GetThreadErrorMode(void);

/// 设置线程错误模式
/// @param new_mode 新的错误处理模式
/// @param old_mode 返回先前的错误处理模式
/// @return 操作结果
int SetThreadErrorMode(uint new_mode, uint& old_mode);
#import
//+------------------------------------------------------------------+